package thread.knn;

import thread.knn.bean.BankMarketing;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

/*
    数据加载器：读取数据文件data和测试文件test
 */
public class BankMarketingLoader {
    /**
     * 读取path位置的文件，并解析成BankMarketing对象
     * @param path
     * @return
     */
    public List<BankMarketing> load(String path){
        List<BankMarketing> list = new ArrayList<>();
        //技术 java.io File类 InputStream OutputStream 二进制流
        //                   =》利用InputStreamReader 包装成字符流 Reader =》BufferedReader （装饰模式）

        //数据线程安全的文件操作类
        //BIO 线程不安全
        //NIO 线程安全

        //异常处理 -》try... resource...
        Path path1 = Paths.get(path);
        try (
                //NIO   线程安全
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(Files.newInputStream(path1)))
        ){
            String line;
            while ((line = br.readLine()) != null) {
                //解析的方式：使用String.split()方法，将字符串按分隔符切分成字符串数组
                String[] values = line.split(";");
                //将字符串数组转换为BankMarketing对象
                BankMarketing bm = new BankMarketing();
                if (values.length != 0 && values!=null)
                    bm.setData(values);
                list.add(bm);
            }
        }catch (Exception e){
            e.printStackTrace();
        }

//        File file = new File(path);
//        //线程不安全
//        try (BufferedReader br = new BufferedReader(new FileReader(file))) {
//            String line;
//            while ((line = br.readLine()) != null) {
//                //解析的方式：使用String.split()方法，将字符串按分隔符切分成字符串数组
//                String[] values = line.split(";");
//                //将字符串数组转换为BankMarketing对象
//                BankMarketing bm = new BankMarketing();
//                if (values.length != 0 && values!=null)
//                    bm.setData(values);
//                list.add(bm);
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }

        return list;
    }
}
